[GdkWindowCache] Don't ignore the CompositeOverlayWindow
authorAdel Gadllah <adel.gadllah@gmail.com>
Mon, 13 Sep 2010 16:20:22 +0000 (18:20 +0200)
committerAdel Gadllah <adel.gadllah@gmail.com>
Mon, 13 Sep 2010 16:20:22 +0000 (18:20 +0200)
Add the composite overlay window to the cache, as this can be a reasonable Xdnd proxy as well.

This is only done when the screen is composited in order to avoid mapping
the COW. We assume that the CM is using the COW (which is true for pretty
much any CM currently in use).

https://bugzilla.gnome.org/show_bug.cgi?id=601731

gdk/x11/gdkdnd-x11.c

index fc946cb672afb6a703f7062c91aa3c4fcf389994..b5e595f8faab1dea404cd137bf7e68e311be213c 100644 (file)
@@ -30,6 +30,7 @@
 #include <X11/Xutil.h>
 #include <X11/Xatom.h>
 #include <X11/extensions/shape.h>
+#include <X11/extensions/Xcomposite.h>
 
 #include <string.h>
 
@@ -537,6 +538,7 @@ gdk_window_cache_new (GdkScreen *screen)
   GdkWindow *root_window = gdk_screen_get_root_window (screen);
   GdkChildInfoX11 *children;
   guint nchildren, i;
+  Window cow;
   
   GdkWindowCache *result = g_new (GdkWindowCache, 1);
 
@@ -585,6 +587,20 @@ gdk_window_cache_new (GdkScreen *screen)
 
   g_free (children);
 
+  /*
+   * Add the composite overlay window to the cache, as this can be a reasonable
+   * Xdnd proxy as well.
+   * This is only done when the screen is composited in order to avoid mapping
+   * the COW. We assume that the CM is using the COW (which is true for pretty
+   * much any CM currently in use).
+   */
+  if (gdk_screen_is_composited (screen))
+    {
+      cow = XCompositeGetOverlayWindow (xdisplay, GDK_WINDOW_XWINDOW (root_window));
+      gdk_window_cache_add (result, cow, 0, 0, gdk_screen_get_width (screen), gdk_screen_get_height (screen), TRUE);
+      XCompositeReleaseOverlayWindow (xdisplay, GDK_WINDOW_XWINDOW (root_window));
+    }
+
   return result;
 }